tg-me.com/developer_tools/242
Last Update:
DeepGit: Hashing names
Ч1, Ч2, Ч3
Что-бы закончить с blob-aми , деревьями и коммитами надо разобраться как git генерирует имена файлам и как хранит все версии всех файлов.
Название git файла определяется следующим образом:
tree #{text.lenght}\0
Общее правило: тип файла => решетка => длина текста => нулевой байт.
Это наш хедер.
Что-бы получить название файла:
Добавляем к хедеру текст файла и берем SHA1 сумму от результата.
Текст файла git сжимает через
zlib
.Как это можно реализовать на python:
[1]: import hashlib
In [2]: from hashlib import sha1
In [3]: sha = hashlib.sha1()
In [4]: line = "developer tools test line"
In [5]: header = f"blob {line.__len__()}\0"
In [6]: content = (header + line).encode()
In [7]: sha.update(content)
In [8]: sha.hexdigest()
Out[8]: '7f0571380d1f5e2a2fb13bb25eeefe5761895e7a'
In [9]: import zlib
In [10]: zlib.compress(content)
Первые два символа из
7f0571380d1f5e2a2fb13bb25eeefe5761895e7a
пойдут как название директории, а остальные в название файла.Резюме: Внутри git нет никакой магии, все данные весьма просто храняться и так-же просто используются.
Напоминаю Вам, что у нас есть чат: https://www.tg-me.com/id/Dev Tools/com.developer_tools_chat , непонимаю почему вас там так мало :)
BY Dev Tools
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/developer_tools/242